package com.code.p9.代理模式;

import com.code.p9.代理模式.动态代理.RealSubject;
import com.code.p9.代理模式.动态代理.Subject;
import com.code.p9.代理模式.静态代理.SubjectDynamicProxy;

/**
 * 描述: describe
 *
 * @author CodeYang_Site
 * @version 2021/6/6 19:25
 */
public class 代理模式 {
    /**
     * 代理模式（Proxy Pattern）是一个使用率非常高的模式，其定义如下：
     * Provide a surrogate or placeholder for another object to control access to it.
     * （为其他对象提供一种代理以控制对这个对象的访问。）
     * 代理模式也叫做委托模式
     *
     * 手写类似AOP的代理实现
     *
     * 1. 静态代理
     * 2. 动态代理
     */

    /**
     * 1.通用静态代理
     */

//    public static void main(String[] args) {
//        Proxy obj = new Proxy(new RealSubjec());
//        obj.request();
//    }
    //2.动态代理
//    public static void main(String[] args) {
//        //定义一个主题
//        Subject subject = new RealSubject();
//        //定义一个Handler
//        InvocationHandler handler = new MyInvocationHandler(subject);
//        //定义主题的代理
//        Subject proxy = DynamicProxy.newProxyInstance(subject.getClass().
//                getClassLoader(), subject.getClass().getInterfaces(), handler);
//        //代理的行为
//        proxy.doSomething("Finish");
//    }


    //3.具体业务的动态代理
    public static void main(String[] args) {
        //定义一个主题
        Subject subject = new RealSubject();
        //定义主题的代理
        Subject proxy = SubjectDynamicProxy.newProxyInstance(subject);
        //代理的行为
        proxy.doSomething("Finish");
    }



}




